package com.whalecloud.chart.service.draw;

import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.whalecloud.chart.domain.DrawChartRequestDTO;
import com.whalecloud.chart.service.AbstractChartService;
import com.whalecloud.chart.service.dto.PieValue;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

import java.io.File;
import java.util.List;

/**
 * @Description 饼状图
 * @Author MarkAsh
 * @Date 2025/2/22
 **/
public class PieChartService extends AbstractChartService {

    /**
     * 创建数据集
     *
     * @param sourceData 源数据
     * @return 数据集
     */
    @Override
    public DefaultCategoryDataset createDataset(JSONArray sourceData) {
        return null;
    }

    /**
     * 绘制图表
     *
     * @param dataset 数据集
     * @return 图表
     */
    @Override
    public JFreeChart createChart(DefaultCategoryDataset dataset) {
        return null;
    }

    /**
     * 创建图表
     *
     * @param requestDTO 源数据
     * @return 图片文件
     */
    @Override
    public File drawChartFile(DrawChartRequestDTO requestDTO) {
        JSONArray sourceData = requestDTO.getSourceData();
        // 创建数据
        DefaultPieDataset<String> dataset = new DefaultPieDataset<>();
        sourceData.forEach(item -> {
            PieValue pieValue = JSONObject.parseObject(JSONObject.toJSONString(item), PieValue.class);
            String value = pieValue.getValue();
            double v = NumberUtil.isNumber(value) ? Double.parseDouble(value) : 0d;
            dataset.setValue(pieValue.getCategory(), v);
        });
        // 创建绘图对象
        JFreeChart bubbleChart = ChartFactory.createPieChart(
                StrUtil.blankToDefault(requestDTO.getTitle(), "Example"), // 图标标题
                dataset,
                false,
                true,
                true
        );
        return super.createChartImage(bubbleChart);
    }

    /**
     * 获取示例数据
     *
     * @return 示例数据
     */
    @Override
    public JSONArray getSampleData() {
        List<PieValue> pieValues = List.of(
                new PieValue("A", "10"),
                new PieValue("B", "20"),
                new PieValue("C", "30"),
                new PieValue("D", "40"),
                new PieValue("E", "50")
        );
        return JSONArray.parseArray(JSONObject.toJSONString(pieValues));
    }
}

